package com.poizon.infrastructure.idem.core.repo;

import com.poizon.infrastructure.idem.core.domain.entity.IdemEntity;

import java.util.concurrent.TimeUnit;

/**
 * 幂等/数据库存储
 */
public interface IIdemDbStoreRepo {
    /**
     * 更新幂等响应
     * redis: 直接将整体数据序列化后覆盖
     * mongodb: 根据主键进行更新响应
     *
     * @return
     */
    Boolean updateIdemResp(
            String idemKey,
            IdemEntity updateRespIdemDto,
            Long expireTime,
            TimeUnit timeUnit
    );

    /**
     * 设置幂等key
     */
    Boolean setIdemKey(
            String idemKey,
            IdemEntity emptyRespIdemDto,
            Long expireTime,
            TimeUnit timeUnit
    );

    /**
     * 获取幂等实体
     */
    IdemEntity getIdemDto(String idemKey);

    /**
     * 删除幂等key
     */
    Boolean delete(String idemKey);
}
